package com.FH.permission.file_menu;

import com.FH.organization.fileupload.FileUploadDTO;
import com.FH.util.AccessDB;
import com.FH.util.ResultDTO;
import com.FH.util.warnSrc;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

import javax.ejb.Stateless;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

/**
 * Created by Administrator on 2018/3/9 0009.
 */
@Stateless
public class FileMenuDAOImpl extends AccessDB implements FileMenuDAO {
    /**
     * 获取文件目录
     *
     * @param search
     */
    @Override
    public ResultDTO getFileMenu(String search) {

        ResultDTO resultDTO = new ResultDTO();
        try {
            JSONObject json = new JSONObject(search);
            String existName = "0";

            String sqlexit = "SELECT COUNT(1) FROM file_menu WHERE 1=1 ";

            String sql_w = "";//查询条件sql组合

            if (json.has("file_menu_id")) {
                sql_w += " AND file_menu_id = " + json.getString("file_menu_id");
            }
            if (json.has("parent_id")) {
                sql_w += " AND parent_id = " + json.getString("parent_id");
            }

            String sql_ok = sqlexit + sql_w;//组合好的sql语句
            existName = getReportingToOne(sql_ok);//查询此数据是否存在

            List<String[]> seresult = new ArrayList<String[]>();

            List<FileMenuShowDTO> result = new ArrayList<FileMenuShowDTO>();

            if (!existName.equals("0")) {

                String sql = "SELECT file_menu_id,file_menu_name,parent_id,file_menu_desc,create_time," +
                        "update_time FROM file_menu WHERE 1=1" + sql_w;
                seresult = this.getReportingTo(sql);

                for (int i = 0; i < seresult.size(); i++) {
                    FileMenuShowDTO fileMenuShowDTO = new FileMenuShowDTO();
                    fileMenuShowDTO.setId(seresult.get(i)[1]);
                    fileMenuShowDTO.setName(seresult.get(i)[2]);
                    fileMenuShowDTO.setpId(seresult.get(i)[3]);
                    fileMenuShowDTO.setFile_menu_desc(seresult.get(i)[4]);
                    fileMenuShowDTO.setCreate_time(seresult.get(i)[5]);
                    fileMenuShowDTO.setUpdate_time(seresult.get(i)[6]);
                    fileMenuShowDTO.setChecked(false);

                    result.add(fileMenuShowDTO);

                }
            }
            if (result.size() != 0) {
                resultDTO.setStr(result.size()+"");
                resultDTO.setValues(result);
                resultDTO.setStatus("90000");
                resultDTO.setDescritpion(warnSrc.get_success);
            } else {
                resultDTO.setStatus("90001");
                resultDTO.setDescritpion(warnSrc.get_fail);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultDTO;
    }

    /**
     * 添加文件目录
     *
     * @param fileMenuPullDTO
     */
    @Override
    public ResultDTO addFileMenu(FileMenuPullDTO fileMenuPullDTO) {

        ResultDTO resultDTO = new ResultDTO();

//        if(null!=fileMenuPullDTO.getFile_menu_id()&&!"".equals(fileMenuPullDTO.getFile_menu_id())){
//            return updateFileMenu(fileMenuPullDTO);
//        }

        //判断重名
        String exist = "SELECT COUNT(1) FROM file_menu WHERE file_menu_name = '" + fileMenuPullDTO.getFile_menu_name() + "'";

        String exist_num = getReportingToOne(exist);

        if(!exist_num.equals("0")){
            resultDTO.setStr("文件目录已存在！");
            resultDTO.setStatus("90001");
            resultDTO.setDescritpion(warnSrc.add_fail);
            return resultDTO;
        }

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        String time = df.format(new Date());
//        String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");

        String insert = "INSERT INTO file_menu (file_menu_id,file_menu_name,parent_id,file_menu_desc,create_time,update_time) " +
                "VALUES ('"+fileMenuPullDTO.getFile_menu_id()+"','"+fileMenuPullDTO.getFile_menu_name()+"','"+fileMenuPullDTO.getParent_id()+"','"+
                fileMenuPullDTO.getFile_menu_desc()+"','"+time+"','"+time+"')";

        int result = addReportingTo(insert);

        // 判断SQl是否执行成功
        if (result != 0) {
            resultDTO.setStatus("90000");
            resultDTO.setDescritpion(warnSrc.add_success);
        } else {
            resultDTO.setStatus("90001");
            resultDTO.setDescritpion(warnSrc.add_fail);
        }

        return resultDTO;
    }

    /**
     * 修改文件目录
     *
     * @param fileMenuPullDTO
     */
    @Override
    public ResultDTO updateFileMenu(FileMenuPullDTO fileMenuPullDTO) {

        ResultDTO resultDTO = new ResultDTO();

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        String time = df.format(new Date());

        String update = "UPDATE file_menu SET update_time = '" + time + "'";

        if(null!=fileMenuPullDTO.getFile_menu_name()&&!"".equals(fileMenuPullDTO.getFile_menu_name())){
            update += ",file_menu_name = '" + fileMenuPullDTO.getFile_menu_name() + "'";
        }
        if(null!=fileMenuPullDTO.getParent_id()&&!"".equals(fileMenuPullDTO.getParent_id())){
            update += ",parent_id = '" + fileMenuPullDTO.getParent_id() + "'";
        }
        if(null!=fileMenuPullDTO.getFile_menu_desc()&&!"".equals(fileMenuPullDTO.getFile_menu_desc())){
            update += ",file_menu_desc = '" + fileMenuPullDTO.getFile_menu_desc() + "'";
        }

        update += " WHERE file_menu_id = '" + fileMenuPullDTO.getFile_menu_id() + "'";

        int result = addReportingTo(update);

        // 判断SQl是否执行成功
        if (result != 0) {
            resultDTO.setStr(fileMenuPullDTO.getFile_menu_id());
            resultDTO.setStatus("90000");
            resultDTO.setDescritpion(warnSrc.update_success);
        } else {
            resultDTO.setStatus("90001");
            resultDTO.setDescritpion(warnSrc.update_fail);
        }

        return resultDTO;
    }

    /**
     * 删除文件目录
     *
     * @param fileMenuPullDTO
     */
    @Override
    public ResultDTO deleteFileMenu(FileMenuPullDTO fileMenuPullDTO) {

        ResultDTO resultDTO = new ResultDTO();

        int result = 0;

        String sql = "SELECT COUNT(1) FROM file_menu WHERE file_menu_id = '" + fileMenuPullDTO.getFile_menu_id() + "'";

        String exist = getReportingToOne(sql);

        if (!exist.equals("0")) {

            String delete = "DELETE FROM file_menu WHERE file_menu_id = '" + fileMenuPullDTO.getFile_menu_id() + "'";

            result = addReportingTo(delete);
        }

        // 判断SQl是否执行成功
        if (result != 0) {
            resultDTO.setStr(fileMenuPullDTO.getFile_menu_id());
            resultDTO.setStatus("90000");
            resultDTO.setDescritpion(warnSrc.delete_success);
        } else {
            resultDTO.setStatus("90001");
            resultDTO.setDescritpion(warnSrc.delete_fail);
        }

        return resultDTO;
    }

    /**
     * 添加文件到目录
     *
     * @param fileMenuPullDTO
     */
    @Override
    public ResultDTO addFileToMenu(FileMenuPullDTO fileMenuPullDTO) {

        ResultDTO resultDTO = new ResultDTO();

        int resultls = 0;

        if(null!=fileMenuPullDTO.getFile_list()&&!"".equals(fileMenuPullDTO.getFile_list())){

            try {
                JSONArray jsonArray = new JSONArray(fileMenuPullDTO.getFile_list());

                for(int i = 0; i< jsonArray.length(); i++){

                    if(null!= jsonArray.getJSONObject(i).getString("file_id")&&!"".equals(jsonArray.getJSONObject(i).getString("file_id"))){

                        String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");

                        String sql = "insert into file_menu_file (file_menu_file_id,file_menu_id,file_id) values " +
                                "('" + uuid + "','" + fileMenuPullDTO.getFile_menu_id() + "','" + jsonArray.getJSONObject(i).getString("file_id") + "')";
                        resultls = this.addReportingTo(sql);
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        if (resultls != 0) {
            resultDTO.setStatus("90000");//
            resultDTO.setDescritpion("文件目录添加文件成功");
        } else {
            resultDTO.setStatus("90001");//
            resultDTO.setDescritpion("文件目录添加文件失败");
        }

        return resultDTO;
    }

    /**
     * 根据文件目录获取文件
     *
     * @param file_menu_id
     */
    @Override
    public ResultDTO getFileByMenuId(String file_menu_id) {

        ResultDTO resultDTO = new ResultDTO();

        String sql = "SELECT DISTINCT mf.file_id,f.file_addr,f.file_time,f.filegui_id,f.file_name FROM file_menu_file mf " +
                "JOIN file f ON mf.file_id = f.file_id WHERE mf.file_menu_id = '" + file_menu_id + "' ";

        List<String[]> results = new ArrayList<String[]>();

        List<FileUploadDTO> fileList = new ArrayList<FileUploadDTO>();

        results = this.getReportingTo(sql);

        for(int i=0;i<results.size();i++){
            FileUploadDTO fileUploadDTO = new FileUploadDTO();
            fileUploadDTO.setFile_id(results.get(i)[1]);
            String[] image_path = this.getImage_path();
            String image_pathSerAddr = image_path[2];//文件访问地址
            fileUploadDTO.setFile_addr(image_pathSerAddr+results.get(i)[2]);
            fileUploadDTO.setFile_time(results.get(i)[3]);
            fileUploadDTO.setFilegui_id(results.get(i)[4]);
            fileUploadDTO.setFiletype(results.get(i)[5]);

            fileList.add(fileUploadDTO);
        }

        if (results.size() > 0) {
            resultDTO.setStatus("90000");//
            resultDTO.setDescritpion("文件获取成功");
            resultDTO.setValues(fileList);
        } else {
            resultDTO.setStatus("90001");//
            resultDTO.setDescritpion("文件获取失败");
        }

        return resultDTO;
    }

    /**
     * 删除目录下的文件
     *
     * @param fileMenuPullDTO
     */
    @Override
    public ResultDTO deleteFile(FileMenuPullDTO fileMenuPullDTO) {

        ResultDTO resultDTO = new ResultDTO();

        int resultls = 0;

        if(null!=fileMenuPullDTO.getFile_list()&&!"".equals(fileMenuPullDTO.getFile_list())){

            try {
                JSONArray jsonArray = new JSONArray(fileMenuPullDTO.getFile_list());

                for(int i = 0; i< jsonArray.length(); i++){

                    if(null!= jsonArray.getJSONObject(i).getString("file_id")&&!"".equals(jsonArray.getJSONObject(i).getString("file_id"))){

                        String sql = "DELETE FROM file_menu_file WHERE file_menu_id = '" + fileMenuPullDTO.getFile_menu_id() + "' " +
                                "AND file_id = '" + jsonArray.getJSONObject(i).getString("file_id") + "'";
                        resultls = this.addReportingTo(sql);
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        if (resultls != 0) {
            resultDTO.setStatus("90000");//
            resultDTO.setDescritpion(warnSrc.delete_success);
        } else {
            resultDTO.setStatus("90001");//
            resultDTO.setDescritpion(warnSrc.delete_fail);
        }

        return resultDTO;
    }

    /**
     * 根据角色获取文件目录
     *
     * @param role_id
     */
    @Override
    public ResultDTO getFileMenuByRoleId(String role_id) {

        ResultDTO resultDTO = new ResultDTO();

        List<String[]> seresult = new ArrayList<String[]>();

        List<FileMenuShowDTO> result = new ArrayList<FileMenuShowDTO>();

        String sql = "SELECT file_menu_id,file_menu_name,parent_id,file_menu_desc,create_time,update_time FROM file_menu";

        seresult = this.getReportingTo(sql);

        for (int i = 0; i < seresult.size(); i++) {
            FileMenuShowDTO fileMenuShowDTO = new FileMenuShowDTO();
            fileMenuShowDTO.setId(seresult.get(i)[1]);
            fileMenuShowDTO.setName(seresult.get(i)[2]);
            fileMenuShowDTO.setpId(seresult.get(i)[3]);
            fileMenuShowDTO.setFile_menu_desc(seresult.get(i)[4]);
            fileMenuShowDTO.setCreate_time(seresult.get(i)[5]);
            fileMenuShowDTO.setUpdate_time(seresult.get(i)[6]);

            String check = "SELECT COUNT(1) FROM sys_role_file_menu WHERE file_menu_id = '" + seresult.get(i)[1] + "' " +
                    "AND sys_role_id = " + role_id;

            String checked = getReportingToOne(check);

            if(checked.equals("0")){
                fileMenuShowDTO.setChecked(false);
            }else {
                fileMenuShowDTO.setChecked(true);
            }
            result.add(fileMenuShowDTO);

        }

        if (result.size() != 0) {
            resultDTO.setStr(result.size()+"");
            resultDTO.setValues(result);
            resultDTO.setStatus("90000");
            resultDTO.setDescritpion(warnSrc.get_success);
        } else {
            resultDTO.setStatus("90001");
            resultDTO.setDescritpion(warnSrc.get_fail);
        }

        return resultDTO;
    }
}
